package com.pai4j.message.aggregation;

import com.pai4j.message.model.MessageContext;

import java.util.List;

/**
 * 消息聚合器接口
 * 聚合相同类型的消息
 *
 * @author PAI4J Team
 * @date 2025-11-01
 */
public interface MessageAggregator {

    /**
     * 添加消息到聚合池
     *
     * @param context 消息上下文
     */
    void add(MessageContext context);

    /**
     * 获取待聚合的消息
     *
     * @param aggregationKey 聚合键
     * @return 消息列表
     */
    List<MessageContext> getPendingMessages(String aggregationKey);

    /**
     * 触发聚合
     *
     * @param aggregationKey 聚合键
     * @return 聚合后的消息
     */
    AggregatedMessage trigger(String aggregationKey);

    /**
     * 批量触发聚合
     *
     * @return 聚合后的消息列表
     */
    List<AggregatedMessage> triggerAll();

    /**
     * 获取聚合规则
     *
     * @return 规则列表
     */
    List<AggregationRule> getRules();

    /**
     * 添加聚合规则
     *
     * @param rule 规则
     */
    void addRule(AggregationRule rule);

    /**
     * 清除已聚合的消息
     */
    void clear();

    /**
     * 获取待聚合消息数量
     *
     * @return 数量
     */
    int getPendingCount();
}

